import sys

from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPalette
from PyQt5.QtWidgets import (QApplication, QMainWindow, QDialog,
                             QWidget, QStackedWidget, QHBoxLayout,
                             QFrame)

from app.style_sheet import Theme, setStyleSheet
from app.view import Page1, HomePage, Page2
from app.view.ClockPage import ClockPage
from app.view.LeftMenu import LeftMenu
from app.view.LoginDialog import LoginDialog
from app.view.TodoListWidget import TodoListWidget
# 导入资源文件(否则查找资源文件异常import resources_rc)
# 样式文件变更需重新编译（pyrcc5 resources.qrc -o resources_rc.py）
from app.resources import resources_rc

# 页面组件
class HomePageWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.ui = HomePage.Ui_Form()
        self.ui.setupUi(self)
        self.setStyleSheet("background-color: #f0f8ff;")  # 爱丽丝蓝


class PageOne(QWidget):
    def __init__(self):
        super().__init__()
        self.ui = Page1.Ui_Form()
        self.ui.setupUi(self)
        self.setStyleSheet("background-color: #f5f5f5;")  # 浅灰


class PageTwo(QWidget):
    def __init__(self):
        super().__init__()
        self.ui = Page2.Ui_Form()
        self.ui.setupUi(self)
        self.setStyleSheet("background-color: #fffacd;")  # 柠檬绸


class Page3(QWidget):
    def __init__(self):
        super().__init__()
        self.ui = Page1.Ui_Form()
        self.ui.setupUi(self)
        self.setStyleSheet("background-color: #e6e6fa;")  # 薰衣草紫


class Page4(QWidget):
    def __init__(self):
        super().__init__()
        self.ui = Page2.Ui_Form()
        self.ui.setupUi(self)
        self.setStyleSheet("background-color: #f0fff0;")  # 蜜露橙


# 主窗口
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.resize(820, 640)  # 增加初始窗口大小
        self.setWindowTitle("APP首页")
        self.setObjectName("MainWindow")

        # 创建主容器
        main_widget = QWidget()
        self.main_layout = QHBoxLayout(main_widget)
        self.main_layout.setContentsMargins(0, 0, 0, 0)
        self.main_layout.setSpacing(0)

        # 创建左侧菜单栏 (使用封装好的LeftMenu类)
        self.left_menu = LeftMenu()
        self.left_menu.menuItemClicked.connect(self.switch_page)  # 连接信号
        self.main_layout.addWidget(self.left_menu)

        # 添加垂直分隔线
        separator = QFrame()
        separator.setFrameShape(QFrame.VLine)
        separator.setFrameShadow(QFrame.Sunken)
        separator.setStyleSheet("background-color: #d3d3d3;")
        self.main_layout.addWidget(separator)

        # 创建堆叠窗口管理器
        self.stacked_widget = QStackedWidget()
        self.main_layout.addWidget(self.stacked_widget, 1)  # 占剩余空间

        # 创建页面实例并添加到堆叠窗口
        self.pages = [
            HomePageWindow(),
            PageOne(),
            PageTwo(),
            Page3(),
            ClockPage(),
            TodoListWidget()
        ]

        for page in self.pages:
            self.stacked_widget.addWidget(page)

        # 设置默认显示首页
        self.stacked_widget.setCurrentIndex(0)
        self.left_menu.set_current_index(0)  # 设置菜单选中状态

        # 设置主窗口的中心部件
        self.setCentralWidget(main_widget)

        # 添加状态栏
        self.statusBar().showMessage("就绪")
        # 设置主题
        self.setProperty('useAcrylic', False)
        setStyleSheet(self, 'main_window', Theme.LIGHT)

    def switch_page(self, index):
        """切换页面并更新窗口标题和菜单选中状态"""
        if index < self.stacked_widget.count():
            self.stacked_widget.setCurrentIndex(index)
            self.left_menu.set_current_index(index)  # 更新菜单选中状态

            # 更新窗口标题
            titles = ["首页", "数据报表", "系统设置", "用户管理", "帮助中心", "待办事项"]
            self.setWindowTitle(f"多页面应用系统 - {titles[index]}")

            # 更新状态栏
            status_messages = [
                "当前页面：系统首页",
                "正在显示数据报表",
                "系统设置页面",
                "用户管理界面",
                "帮助与支持中心",
                "待办事项管理"
            ]
            self.statusBar().showMessage(status_messages[index])

    def resizeEvent(self, event):
        """重写窗口大小事件，通知菜单栏调整尺寸"""
        super().resizeEvent(event)
        # 菜单栏的resizeEvent会自动处理


# 程序入口
if __name__ == '__main__':
    app = QApplication(sys.argv)

    # 设置全局调色板
    palette = app.palette()
    palette.setColor(QPalette.WindowText, Qt.black)  # 窗口文本
    palette.setColor(QPalette.ButtonText, Qt.black)  # 按钮文本
    palette.setColor(QPalette.Text, Qt.black)  # 输入框文本
    app.setPalette(palette)

    if True:
        main_window = MainWindow()
        main_window.show()
        sys.exit(app.exec_())

    # 创建并显示登录对话框
    login_dialog = LoginDialog()

    # 根据登录结果决定后续操作
    if login_dialog.exec_() == QDialog.Accepted:
        # 登录成功，显示主界面
        main_window = MainWindow()
        main_window.show()
        sys.exit(app.exec_())
    else:
        # 登录取消，直接退出程序
        sys.exit(0)
